class Asset(object):
    _container = None
    _name = None
    _headers = {'Cache-Control': "",
                      'Expires': "",
                      'Last-Modified': ""}

    def __init__(self, container=None, name=None):
        self._name = name
        self._container = container

    def save(self, data):
        """
            Method to save the file data to the CDN
        """
        raise NotImplemented

    def set_headers(self, **kwargs):
        """
            Method to set the headers for this asset
            {'Cache-Control': "",
             'Expires': "",
             'Last-Modified': ""}
        """
        raise NotImplemented

    def make_public(self):
        raise NotImplemented

    def uri(self):
        raise NotImplemented

    def _validate_name(self, value):
        return True

    def _get_name(self):
        return self._name
    def _set_name(self, value):
        if not isinstance(value, basestring):
            raise TypeError("name must be a str or unicode, got %s instead", type(value))

        if self._validate_name(value):
            self._name = value
    name = property(_get_name, _set_name, doc="The name of this asset")
